﻿#include"BSTree.hpp"
#include"AVLTree.hpp"
#include"map.hpp"
#include"set.hpp"
#include<iostream>
#include"RBTree.hpp"

using namespace std;


////int main()
////{
////	BSTree<int, int> test;
////	test.insert(1, 1);
////	test.insert(3, 1);
////	test.insert(4, 1);
////	test.insert(2, 1);
////	test.erase(1);
////	test.erase(3);
////
////	test.Inorder();
////}
//
//void TestBSTree()
//{
//	/*BSTree<string, string> dict;
//	dict.insert("insert", "插入");
//	dict.insert("erase", "删除");
//	dict.insert("left", "左边");
//	dict.insert("string", "字符串");
//
//	string str;
//	while (cin >> str)
//	{
//		auto ret = dict.find(str);
//		if (ret)
//		{
//			cout << str << ":" << ret->_val << endl;
//		}
//		else
//		{
//			cout << "单词拼写错误" << endl;
//		}
//	}*/
//
//	string strs[] = { "苹果", "西瓜", "苹果", "樱桃", "苹果", "樱桃", "苹果", "樱桃", "苹果" };
//	// 统计水果出现的次
//	BSTree<string, int> countTree;
//	for (auto str : strs)
//	{
//		auto ret = countTree.find(str);
//		if (ret == NULL)
//		{
//			countTree.insert(str, 1);
//		}
//		else
//		{
//			ret->_val++;
//		}
//	}
//	countTree.Inorder();
//}
//
//int main()
//{
//	TestBSTree();
//}

void testAVLTree()
{
	int num = 1000;
	srand(1);
	AVLTree<int, int> test;

	for (size_t i = 0; i < num; i++)
	{
		int ins = rand() % 1000;
		test.insert(ins,ins);

		if (!test.is_balance())
		{
			cout << "平衡因子异常" << endl;
			break;
		}
	}

	test.Inorder();
}

void testRBTree()
{
	int num = 1000;
	srand(2);
	RBTree<int, int> test;

	for (size_t i = 0; i < num; i++)
	{
 		int ins = rand() % 10000;
		cout << ins << ' ' << endl;
		test.insert(ins, ins);

		if (!test.is_balance())
		{
			cout << "红黑树异常" << endl;
			break;
		}
	}

	test.Inorder();

	
}

void test_RBTree_iterator()
{
	RBTree<int,int> Tree;
	Tree.insert(1, 1);
	Tree.insert(2, 5);
	Tree.insert(5, 7);
	Tree.insert(8, 9);
	Tree.insert(7, 1);
	Tree.insert(6, 3);

	for (auto e : Tree)
	{

	}
}

void test_set()
{
	set<int> s;
	s.insert(2);
	s.insert(3);
	s.insert(1);
	s.insert(9);
	s.insert(5);

	auto is = s.begin();
	while (is != s.end())
	{
		cout << *is << endl;
		is++;
	}
}

void test_map()
{
	map<string, string> m;
	m["苹果"] = "apple";
	m["香蕉"] = "bananan";
	m["查找"] = "find";
	m["路径"] = "path";

	for (auto e : m)
	{
		cout << e << endl;
	}
}
int main()
{
	test_map();
}